<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 闭包 closure  指有权访问另一个函数作用域中变量的函数
        // 一个作用域可以访问另外一个函数的局部变量
        // 1.子函数可以访问父函数内的局部变量 也存在闭包的现象
        // function fn() {
        //     var num = 10
        //     function fun() {
        //         console.log(num);
        //     }
        //     fun()
        // }
        // fn()

        // 2.闭包现象:fn外面的作用域可以访问fn内部的局部变量
        // 3.闭包的主要作用:延伸了变量的作用范围
        function fn() {
            var num = 10
            // function fun() {
            //     console.log(num);
            // }
            // 把fun函数作为fn的返回值传递出去
            // return fun;

            // 简单写法 匿名函数比上面简单点儿
            return function() {
                console.log(num);
            }
        }
        // 调用fn并赋值出来
        var f = fn()
        // 类似于 f = function() {
        // console.log(num);
        // }
        // 在进行调用 即实现了外部作用域访问函数内部变量 实现了闭包
        f()


    </script>
</body>

</html>